lua

您所在的位置:网站首页 1 1不是二谜底是什么 lua

lua

2023-08-26 19:56| 来源: 网络整理| 查看: 265

function test1(tt)     tt = {1, 3, 5} end   function test2(tt)     tt[1] = 2     tt["a"] = "hello" end     t = {4, 5, 6}   test1(t)   for k,v in pairs(t) do     print(v) end   print("------")   t = {4, 5, 6}   test2(t)   for k,v in pairs(t) do     print(v) end

test1改不了外部的t的值。test1如果想改变外部的t的值,可以把修改后的table返回给t。 test2能改变外部t的值,但是前提是传入的外部tt不能为nil。如果t为nil,在函数内再分配空间、赋值,外部的t还是为nil。可以先在外部给t分配内存 tt = {},然后再作为参数传递给test2,此时在test2里面修改tt的值,外部t也会改变。

lua中table的引用传递只能是修改该table对象的内部元素,对table对象的复制操作,无法做到引用传递的效果。

所谓值传递,其实是一种拷贝传递,函数调用时,在函数栈中, 拷贝实参的值到形参,所以,对形参的修改当然不会影响实参。

要做到函数内部修改,在外部可见,一种方式是传递地址,如这里的table的内部元素,另一种是传递引用,引用传递需要语言级别的支持,如c的&引用传递符号,表示该变量不是拷贝传递,形参是实参的别名。(其实底层的实现用的是指针)  



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3